﻿using ITA;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;


namespace WPFTesztMemAlapuhoz
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private string utvonal;
        private string kepUtvonal;
        private int kommentSorszam;
        private int kommentOsszesen;
        private bool ujKommentE;
        private BackgroundWorker loadWorker = new BackgroundWorker();
        private BackgroundWorker saveWorker = new BackgroundWorker();
        private BackgroundWorker deleteWorker = new BackgroundWorker();

        private IAdatkezeles mentes;

        public MainWindow()
        {
            InitializeComponent();
            Environment.SetEnvironmentVariable("MentesFajta", "FajlAlapu");
            mentes = AdatHozzaFeresKeszito.Keszit();
            Datum1.SelectedDate = DateTime.Today;

            saveWorker.DoWork += Mentes;
            saveWorker.RunWorkerCompleted += MentesKesz;

            loadWorker.DoWork += Visszatoltes;
            loadWorker.RunWorkerCompleted += VisszatoltesKesz;

            deleteWorker.DoWork += Torles;
            deleteWorker.RunWorkerCompleted += TorlesKesz;

            buttonDelete.IsEnabled = false;
            buttonNextComment.IsEnabled = false;
            buttonPrevComment.IsEnabled = false;
            buttonNewComment.IsEnabled = false;
            ButtonSave.IsEnabled = false;


        }

        /// <summary>
        /// Egy eseménykezelő metódus, ahol a "Mentés" gombra kattintva elindul egy háttérszál, amely elvégzi a beírt adatok lementését
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ButtonSave_Click(object sender, RoutedEventArgs e)
        {
            /* SaveFileDialog fajlBongeszo = new SaveFileDialog(); 
             fajlBongeszo.FileName = "Mentes";
             fajlBongeszo.DefaultExt = ".xml";
             fajlBongeszo.Filter = "XML fájlok (.xml)|*.xml";

             bool? mentes = fajlBongeszo.ShowDialog();
             if (mentes == true)
             {
                 utvonal = fajlBongeszo.FileName;*/
            //ButtonSave.IsEnabled = false;
            if (string.IsNullOrWhiteSpace(Rovid.Text) && string.IsNullOrWhiteSpace(Hosszu.Text))
            {
                MessageBox.Show("Kérem töltse ki a kommenteket!");
            }
            else
            {
                buttonDelete.IsEnabled = false;
                buttonNextComment.IsEnabled = false;
                buttonPrevComment.IsEnabled = false;
                buttonNewComment.IsEnabled = false;
                ButtonSave.IsEnabled = false;
                ButtonPicture.IsEnabled = false;

                if (ujKommentE || kommentOsszesen == 0)
                {
                    Szoveg szoveg = new Szoveg();
                    Megjegyzes megjegyzes = new Megjegyzes();

                    szoveg.Rovid = Rovid.Text;
                    szoveg.Hosszu = Hosszu.Text;
                    szoveg.Datum = Datum1.SelectedDate.Value;
                    megjegyzes.SzovegLista.Add(szoveg);
                    megjegyzes.Utvonal = kepUtvonal;
                    saveWorker.RunWorkerAsync(megjegyzes);
                }
                else
                {
                    Szoveg szoveg = new Szoveg();

                    szoveg.Rovid = Rovid.Text;
                    szoveg.Hosszu = Hosszu.Text;
                    szoveg.Datum = Datum1.SelectedDate.Value;
                    saveWorker.RunWorkerAsync(szoveg);
                }
            }
            


        }
        /*
        /// <summary>
        /// Egy eseménykezelő metódus, ahol a "Visszatöltés" gombra kattintva elindul egy háttérszál, ami visszatölti a lementett megjegyzést
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            OpenFileDialog fajlBongeszo = new OpenFileDialog();

            bool? visszatoltes = fajlBongeszo.ShowDialog();
            if (visszatoltes == true)
            {
                kepUtvonal = fajlBongeszo.FileName;
                ButtonSave.IsEnabled = false;
                ButtonLoad.IsEnabled = false;

                kommentSorszam = 0;
                loadWorker.RunWorkerAsync();
            }
        }*/

        /// <summary>
        /// Kap egy megjegyzés objektumot, majd lementi
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void Mentes(object sender, DoWorkEventArgs e)
        {

            if (ujKommentE || kommentOsszesen == 0)
                {
                    Megjegyzes megjegyzes = e.Argument as Megjegyzes;
                    mentes.Mentes(megjegyzes, utvonal);
                    megjegyzes = mentes.Betoltes(kepUtvonal);
                    e.Result = megjegyzes;
                }
                else
                {
                    Szoveg szoveg = e.Argument as Szoveg;
                    mentes.Modositas(kommentSorszam, szoveg, kepUtvonal);
                }
        }

        /// <summary>
        /// Ha elkészült a mentés, üresre állítja a mezőket
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void MentesKesz(object sender, RunWorkerCompletedEventArgs e)
        {
            if (ujKommentE || kommentOsszesen == 0)
            {
                ButtonSave.IsEnabled = true;
                Megjegyzes megjegyzes = e.Result as Megjegyzes;
                kommentOsszesen = megjegyzes.SzovegLista.Count;
                kommentSorszam = kommentOsszesen;
                labelCommentCount.Content = kommentSorszam + "/" + kommentOsszesen;
                kommentSorszam--;
                ujKommentE = false;
            }

            buttonDelete.IsEnabled = true;
            buttonNextComment.IsEnabled = true;
            buttonPrevComment.IsEnabled = true;
            buttonNewComment.IsEnabled = true;
            ButtonSave.IsEnabled = true;
            ButtonPicture.IsEnabled = true;

        }

        /// <summary>
        /// Betölti, amit lementett és azt adja vissza
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void Visszatoltes(object sender, DoWorkEventArgs e)
        {


            Megjegyzes megjegyzes = mentes.Betoltes(kepUtvonal);
            e.Result = megjegyzes;
        }

        /// <summary>
        /// A megkapott megjegyzés alapján beírja őket a mezőkbe
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void VisszatoltesKesz(object sender, RunWorkerCompletedEventArgs e)
        {
            ButtonSave.IsEnabled = true;
            buttonDelete.IsEnabled = true;
            buttonNextComment.IsEnabled = true;
            buttonPrevComment.IsEnabled = true;
            buttonNewComment.IsEnabled = true;

            Megjegyzes megjegyzes = e.Result as Megjegyzes;
            kommentOsszesen = megjegyzes.SzovegLista.Count;
            if (kommentOsszesen == 0)
            {
                Rovid.Text = String.Empty;
                Hosszu.Text = String.Empty;
                Datum1.SelectedDate = DateTime.Today;
                imgTitle.Source = new BitmapImage(new Uri(kepUtvonal));
                labelPicturePath.Content = kepUtvonal;
                labelCommentCount.Content = "0/0";
            }
            else
            {
                if (kommentSorszam >= kommentOsszesen)
                {
                    kommentSorszam = 0;
                }
                if (kommentSorszam < 0)
                {
                    kommentSorszam = kommentOsszesen - 1;
                }
                Szoveg szoveg = megjegyzes.SzovegLista[kommentSorszam];
                Rovid.Text = szoveg.Rovid;
                Hosszu.Text = szoveg.Hosszu;
                Datum1.SelectedDate = szoveg.Datum;
                imgTitle.Source = new BitmapImage(new Uri(kepUtvonal));
                labelPicturePath.Content = kepUtvonal;
                labelCommentCount.Content = (kommentSorszam + 1) + "/" + kommentOsszesen;
            }

            buttonDelete.IsEnabled = true;
            buttonNextComment.IsEnabled = true;
            buttonPrevComment.IsEnabled = true;
            buttonNewComment.IsEnabled = true;
            ButtonSave.IsEnabled = true;
            ButtonPicture.IsEnabled = true;

        }

        private void ButtonPicture_Click_2(object sender, RoutedEventArgs e)
        {
            buttonDelete.IsEnabled = false;
            buttonNextComment.IsEnabled = false;
            buttonPrevComment.IsEnabled = false;
            buttonNewComment.IsEnabled = false;
            ButtonSave.IsEnabled = false;
            ButtonPicture.IsEnabled = false;

            OpenFileDialog fajlBongeszo = new OpenFileDialog();
            fajlBongeszo.Filter = "Képek (*.bmp, *.jpg, *.jpe, *.png, *.gif, *.ico)|*.bmp;*.jpg;*.jpe;*.png;*.gif;*.ico";

            bool? visszatoltes = fajlBongeszo.ShowDialog();
            if (visszatoltes == true)
            {
                kepUtvonal = fajlBongeszo.FileName;
                ButtonSave.IsEnabled = false;


                kommentSorszam = 0;
                loadWorker.RunWorkerAsync();

            }
            else
            {
                buttonDelete.IsEnabled = true;
                buttonNextComment.IsEnabled = true;
                buttonPrevComment.IsEnabled = true;
                buttonNewComment.IsEnabled = true;
                ButtonSave.IsEnabled = true;
                ButtonPicture.IsEnabled = true;
            }
        }

        private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
        {

            XmlMentes sajt = new XmlMentes();
            /*if(Search.AcceptsReturn)
            {
                sajt.Kereses(Search.Text);
            }
            if (!string.IsNullOrWhiteSpace(Search.Text))
            {
                sajt.Kereses(Search.Text);
            }*/
            /*
             if (e.Key == Key.Enter)
             {
                 // MAKE STUFF HAPPEN
             }

             if(Search.IsKeyboardFocusWithin)
             {
                 if (Search.AcceptsReturn)
                 { */
            // sajt.Kereses(Search.Text);


        }

        private void buttonPrevComment_Click(object sender, RoutedEventArgs e)
        {
            kommentSorszam--;
            loadWorker.RunWorkerAsync();
        }

        private void buttonNextComment_Click(object sender, RoutedEventArgs e)
        {
            kommentSorszam++;
            loadWorker.RunWorkerAsync();
        }

        public void Torles(object sender, DoWorkEventArgs e)
        {

            Szoveg szoveg = e.Argument as Szoveg;
            mentes.Torles(szoveg, kepUtvonal);
            Megjegyzes megjegyzes = mentes.Betoltes(kepUtvonal);
            e.Result = megjegyzes;
        }

        public void TorlesKesz(object sender, RunWorkerCompletedEventArgs e)
        {
            Megjegyzes megjegyzes = e.Result as Megjegyzes;
            kommentOsszesen = megjegyzes.SzovegLista.Count;
            if (kommentOsszesen == 0)
            {
                Rovid.Text = String.Empty;
                Hosszu.Text = String.Empty;
                Datum1.SelectedDate = DateTime.Today;
                kommentSorszam = -1;
            }
            else
            {
                if (kommentSorszam >= kommentOsszesen)
                {
                    kommentSorszam = 0;
                }
                if (kommentSorszam < 0)
                {
                    kommentSorszam = kommentOsszesen - 1;
                }
                Szoveg szoveg = megjegyzes.SzovegLista[kommentSorszam];
                Rovid.Text = szoveg.Rovid;
                Hosszu.Text = szoveg.Hosszu;
                Datum1.SelectedDate = szoveg.Datum;
            }

            labelCommentCount.Content = (kommentSorszam+1) + "/" + kommentOsszesen;

            buttonDelete.IsEnabled = true;
            buttonNextComment.IsEnabled = true;
            buttonPrevComment.IsEnabled = true;
            buttonNewComment.IsEnabled = true;
            ButtonSave.IsEnabled = true;
            ButtonPicture.IsEnabled = true;
        }

        private void buttonDelete_Click(object sender, RoutedEventArgs e)
        {
            buttonDelete.IsEnabled = false;
            buttonNextComment.IsEnabled = false;
            buttonPrevComment.IsEnabled = false;
            buttonNewComment.IsEnabled = false;
            ButtonSave.IsEnabled = false;
            ButtonPicture.IsEnabled = false;

            Szoveg szoveg = new Szoveg();

            szoveg.Rovid = Rovid.Text;
            szoveg.Hosszu = Hosszu.Text;
            szoveg.Datum = Datum1.SelectedDate.Value;

            deleteWorker.RunWorkerAsync(szoveg);
        }

        private void buttonNew_Click(object sender, RoutedEventArgs e)
        {
            Rovid.Text = String.Empty;
            Hosszu.Text = String.Empty;
            ujKommentE = true;
        }
    }
}
